/* 
 * File:   CPartida.cpp
 */

#include "CPartida.h"
#include "../interfacesCol/IIterator.h"
#include "../headers/TipoUnidad.h"
#include "../collections/Collection.h"
#include "CMapa.h"
#include "CJugador.h"
#include "../headers/Partida.h"
#include "../collections/Dictionary.h"
#include "../headers/JugadorEnPartida.h"

CPartida* CPartida::instancia= NULL;

CPartida::CPartida() {
    this->nomMapa=new String();
    this->nomPartida=new String();
    this->tiposUnidad=new Dictionary();
    this->nomsTU= new Collection();
    this->limite=0;
    this->lDJAux = new Collection();
    this->nomJ=new String();
    this->nomT=new String();
    this->tADom=new Collection();
}

CPartida* CPartida::getInstancia(){
    if(instancia== NULL)
        instancia= new CPartida();
    return instancia;
}

ICollection* CPartida::listarTipoUnidad(){
    ICollection* listaTU = new Collection();
    IIterator* it = this->tiposUnidad->getIterator();
    while(it->hasCurrent()){
        TipoUnidad* tu= (TipoUnidad*)it->getCurrent();
        listaTU->add(tu->obtenerDataTipoUnidad(tu));
        it->next();
    }
    delete it;
    return listaTU;
}

void CPartida::agregarTipoUnidad(String* tu){
    this->nomsTU->add(tu);
}
void CPartida::ingresarDatosPartida(String* nM, String* nP){
    this->nomMapa=nM;
    this->nomPartida=nP;
}

void CPartida::ingresarLimite(int l){
    this->limite = l;
}

ICollection* CPartida::listarTerritorios(){
    CMapa* cm=CMapa::getInstancia();
    ICollection* lt;
    lt= cm->listarTerritorios();
    return lt;
}

ICollection* CPartida::listarMails(){
    CJugador* cj=CJugador::getInstancia();
    return cj->listarMails();
}

void CPartida::ingreseJugador(String*email, String*nomT, dataUnidad*du, String*obj){
    this->lDJAux->add(new dataJAux(email, nomT,obj,du));
}

void CPartida::ingresarJugador(String* nomJ){
    this->nomJ=nomJ;
}

void CPartida::ingresarNomTerritorio(String* nomT){
    this->nomT=nomT;
}

bool CPartida::crearPartida(){
    CMapa* cm=CMapa::getInstancia();
    //2nomM=getNomM
    Mapa* m= cm->buscarMapa(this->nomMapa);
    //4 nomPartida=nomPartida
    //5 limite
    Partida* p = new Partida(this->nomPartida,this->limite);
    p->setMapa(m);
    //7 lnomTU
    IIterator* it = this->nomsTU->getIterator();
    while(it->hasCurrent()){
        String* nomTU = (String*) it->getCurrent();
        TipoUnidad* tu = (TipoUnidad*)this->tiposUnidad->find(nomTU);
        p->agragarTipoUnidad(tu);
        it->next();
    }
    //10 lsitaDataJAux
    it = this->lDJAux->getIterator();
     while(it->hasCurrent()){
        dataJAux* dja = (dataJAux*) it->getCurrent();
        p->cearJP(dja);
        p->crearObjetivo(this->nomPartida,this->tADom,this->nomJ);
        p->agregarJugadorPartida();


        JugadorEnPartida* jp = new JugadorEnPartida();
        jp->create(dja,m);

        it->next();
    }
}


bool fueUtilizado(char* c){


}
CPartida::~CPartida() {
}


String* CPartida::getNomPartida(){
    return this->nomPartida;
}